package rtda.heap;

import classfile.ClassFile;
import classfile.ConstantPool;
import classfile.attribute.BootstrapMethods;
import classloader.ClassLoader;
import lombok.Data;

import java.util.List;

@Data
public class KClass {
    // 当前类（或者接口）的访问修饰符， 如public， private等， 此外， 这里面还存在一个标志位， 标志当前的额这个class描述的是类， 还是接口
    public final int accessFlags;

    // 类名
    public final String name;

    // 接口名
    public final List<String> interfaceNames;

    // 方法表
    public final List<KMethod> methods;

    // 属性表
    public final List<KField> fields;

    // TODO: 什么是引导方法
    public final BootstrapMethods bootstrapMethods;

    // 常量池
    public final ConstantPool constantPool;

    // 类加载器
    public final ClassLoader classLoader;

    // 类文件
    public final ClassFile classFile;

    // 父类名
    public final String superClassName;

    // 父类的类对象
    private KClass superClass;

    // 接口
    private List<KClass> interfaces;

    // TODO: 这个有什么用
    private int staticInit = 0;

    // TODO: 这个？
    private KObject runtimeClass;

}
